JavaScriptéåæã€ãã¬ãŒã¿ãŒãã«ããŒãšãšã©ãŒããŠã³ããªãŒã䜿çšããŠéåæã¹ããªãŒã ã®ãšã©ãŒãåé¢ã»åŠçããæ¹æ³ãæ¢ããã¢ããªã±ãŒã·ã§ã³ã®å埩åãšãŠãŒã¶ãŒäœéšãåäžãããŸãã
JavaScriptéåæã€ãã¬ãŒã¿ãŒãã«ããŒã®ãšã©ãŒããŠã³ããªãŒïŒã¹ããªãŒã ãšã©ãŒã®åé¢
JavaScriptã«ãããéåæããã°ã©ãã³ã°ã¯ãç¹ã«ãµãŒããŒãµã€ãéçºã§ã®Node.jsãã¯ã©ã€ã¢ã³ããµã€ãã§ã®Fetch APIã®å°é ã«ããããŸããŸãäžè¬çã«ãªã£ãŠããŸããéåæã€ãã¬ãŒã¿ãŒãšããã«é¢é£ãããã«ããŒã¯ãããŒã¿ã®ã¹ããªãŒã ãéåæã§åŠçããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸããããããä»ã®éåææäœãšåæ§ã«ããšã©ãŒãçºçããå¯èœæ§ããããŸããã¯ã©ãã·ã¥ããããšãªãäºæãã¬åé¡ãé©åã«åŠçã§ããå埩åã®ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ã¯ãå ç¢ãªãšã©ãŒãã³ããªã³ã°ã®å®è£ ãäžå¯æ¬ ã§ãããã®èšäºã§ã¯ãéåæã€ãã¬ãŒã¿ãŒãã«ããŒãšãšã©ãŒããŠã³ããªãŒã䜿çšããŠãéåæã¹ããªãŒã å ã®ãšã©ãŒãåé¢ããåŠçããæ¹æ³ã«ã€ããŠæ¢ããŸãã
éåæã€ãã¬ãŒã¿ãŒãšãã«ããŒã®çè§£
éåæã€ãã¬ãŒã¿ãŒã¯ãå€ã®ã·ãŒã±ã³ã¹ãéåæã§å埩åŠçã§ããããã«ããã€ãã¬ãŒã¿ãŒãããã³ã«ã®æ¡åŒµã§ãããããã¯ã{value, done}ãªããžã§ã¯ãã«è§£æ±ºããããããã¹ãè¿ãnext()ã¡ãœããã®ååšã«ãã£ãŠå®çŸ©ãããŸããJavaScriptã¯ãéåæãžã§ãã¬ãŒã¿ãŒé¢æ°ãªã©ãéåæã€ãã¬ãŒã¿ãŒãäœæããã³æ¶è²»ããããã®ããã€ãã®çµã¿èŸŒã¿ã¡ã«ããºã ãæäŸããŸãïŒ
async function* generateNumbers(limit) {
for (let i = 0; i < limit; i++) {
await new Promise(resolve => setTimeout(resolve, 100)); // Simulate async delay
yield i;
}
}
const asyncIterator = generateNumbers(5);
async function consumeIterator() {
let result = await asyncIterator.next();
while (!result.done) {
console.log(result.value);
result = await asyncIterator.next();
}
}
consumeIterator(); // Outputs 0, 1, 2, 3, 4 (with delays)
æè¿å°å
¥ãããéåæã€ãã¬ãŒã¿ãŒãã«ããŒã¯ãé
åã®mapãfilterãreduceãªã©ã®ã¡ãœããã«é¡äŒŒãããéåæã€ãã¬ãŒã¿ãŒãæäœããããã®äŸ¿å©ãªã¡ãœãããæäŸããŸãããããã®ãã«ããŒã¯ãéåæã¹ããªãŒã åŠçã倧å¹
ã«ç°¡çŽ åã§ããŸãã
async function* generateNumbers(limit) {
for (let i = 0; i < limit; i++) {
await new Promise(resolve => setTimeout(resolve, 100));
yield i;
}
}
async function* transform(source) {
for await (const value of source) {
yield value * 2;
}
}
async function main() {
const numbers = generateNumbers(5);
const doubledNumbers = transform(numbers);
for await (const number of doubledNumbers) {
console.log(number);
}
}
main(); // Outputs 0, 2, 4, 6, 8 (with delays)
課é¡ïŒéåæã¹ããªãŒã ã«ããããšã©ãŒãã³ããªã³ã°
éåæã¹ããªãŒã ãæ±ãéã®äž»èŠãªèª²é¡ã®1ã€ã¯ããšã©ãŒãã³ããªã³ã°ã§ããã¹ããªãŒã åŠçãã€ãã©ã€ã³å ã§ãšã©ãŒãçºçãããšãæäœå šäœã忢ããå¯èœæ§ããããŸããäŸãã°ãè€æ°ã®APIããããŒã¿ãååŸããã¹ããªãŒã ã§åŠçããŠããã·ããªãªãèããŠã¿ãŸãããã1ã€ã®APIåŒã³åºãã倱æããå Žåãããã»ã¹å šäœãäžæ¢ããã®ã§ã¯ãªãããšã©ãŒããã°ã«èšé²ããåé¡ã®ããããŒã¿ãã¹ãããããŠãæ®ãã®ããŒã¿ã®åŠçãç¶ããããšæããããããŸããã
åŸæ¥ã®try...catchãããã¯ã¯åæã³ãŒãã®ãšã©ãŒãåŠçã§ããŸãããéåæã€ãã¬ãŒã¿ãŒããã®ãã«ããŒå
ã§çºçãããšã©ãŒã«çŽæ¥å¯ŸåŠãããã®ã§ã¯ãããŸãããã¹ããªãŒã åŠçããžãã¯å
šäœãtry...catchãããã¯ã§å²ãã ãã§ã¯äžååãªå ŽåããããŸãããªããªãããšã©ãŒã¯éåæã®å埩ããã»ã¹ã®å¥¥æ·±ãã§çºçããå¯èœæ§ãããããã§ãã
éåæã€ãã¬ãŒã¿ãŒã®ããã®ãšã©ãŒããŠã³ããªãŒã®å°å ¥
ãšã©ãŒããŠã³ããªãŒãšã¯ãåã³ã³ããŒãã³ãããªãŒã®ã©ããã§çºçããJavaScriptãšã©ãŒããã£ãããããããã®ãšã©ãŒããã°ã«èšé²ããã¯ã©ãã·ã¥ããã³ã³ããŒãã³ãããªãŒã®ä»£ããã«ãã©ãŒã«ããã¯UIã衚瀺ããã³ã³ããŒãã³ããŸãã¯é¢æ°ã§ãããšã©ãŒããŠã³ããªãŒã¯éåžžãReactã³ã³ããŒãã³ãã«é¢é£ä»ããããŠããŸããããã®æŠå¿µã¯éåæã¹ããªãŒã ã®ãšã©ãŒãåŠçããããã«å¿çšã§ããŸãã
äžå¿çãªèãæ¹ã¯ãéåæã®å埩ããã»ã¹å ã§çºçãããšã©ãŒãååããã©ãããŒé¢æ°ãŸãã¯ãã«ããŒãäœæããããšã§ãããã®ã©ãããŒã¯ããšã©ãŒããã°ã«èšé²ããå埩ã¢ã¯ã·ã§ã³ãå®è¡ããåé¡ã®ããå€ãã¹ãããããããããã©ã«ãå€ãäŒæãããããšãã§ããŸããããã€ãã®ã¢ãããŒããèŠãŠã¿ãŸãããã
1. åå¥ã®éåææäœãã©ãããã
1ã€ã®ã¢ãããŒãã¯ãã¹ããªãŒã åŠçãã€ãã©ã€ã³å
ã®ååå¥ã®éåææäœãtry...catchãããã¯ã§ã©ããããããšã§ããããã«ãããçºçå
ã§ãšã©ãŒãåŠçããããããããã«äŒæããã®ãé²ãããšãã§ããŸãã
async function* fetchData(urls) {
for (const url of urls) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
yield data;
} catch (error) {
console.error(`Error fetching data from ${url}:`, error);
// You could yield a default value or skip the value altogether
yield null; // Yielding null to signal an error
}
}
}
async function main() {
const urls = [
'https://jsonplaceholder.typicode.com/todos/1', // Valid URL
'https://jsonplaceholder.typicode.com/todos/invalid', // Invalid URL
'https://jsonplaceholder.typicode.com/todos/2',
];
const dataStream = fetchData(urls);
for await (const data of dataStream) {
if (data) {
console.log('Processed data:', data);
} else {
console.log('Skipped invalid data');
}
}
}
main();
ãã®äŸã§ã¯ãfetchData颿°ãåfetchåŒã³åºããtry...catchãããã¯ã§ã©ããããŠããŸãããã§ããäžã«ãšã©ãŒãçºçããå Žåããšã©ãŒããã°ã«èšé²ããnullãyieldããŸããã¹ããªãŒã ã®ã³ã³ã·ã¥ãŒããŒã¯ãnullå€ããã§ãã¯ããŠé©åã«åŠçã§ããŸããããã«ããã1ã€ã®APIåŒã³åºãã®å€±æãã¹ããªãŒã å
šäœãã¯ã©ãã·ã¥ãããã®ãé²ããŸãã
2. åå©çšå¯èœãªãšã©ãŒããŠã³ããªãŒãã«ããŒã®äœæ
ããè€éãªã¹ããªãŒã åŠçãã€ãã©ã€ã³ã§ã¯ãåå©çšå¯èœãªãšã©ãŒããŠã³ããªãŒãã«ããŒé¢æ°ãäœæããããšãæçã§ãããã®é¢æ°ã¯ãä»»æã®éåæã€ãã¬ãŒã¿ãŒãã©ããããäžè²«ããŠãšã©ãŒãåŠçã§ããŸãã
async function* errorBoundary(source, errorHandler) {
for await (const value of source) {
try {
yield value;
} catch (error) {
errorHandler(error);
// You could yield a default value or skip the value altogether
// For example, yield undefined to skip:
// yield undefined;
// Or, yield a default value:
// yield { error: true, message: error.message };
}
}
}
async function* transformData(source) {
for await (const item of source) {
if (item && item.title) {
yield { ...item, transformed: true };
} else {
throw new Error('Invalid data format');
}
}
}
async function main() {
const data = [
{ userId: 1, id: 1, title: 'delectus aut autem', completed: false },
null, // Simulate invalid data
{ userId: 2, id: 2, title: 'quis ut nam facilis et officia qui', completed: false },
];
async function* generateData(dataArray) {
for (const item of dataArray) {
yield item;
}
}
const dataStream = generateData(data);
const errorHandler = (error) => {
console.error('Error in stream:', error);
};
const safeStream = errorBoundary(transformData(dataStream), errorHandler);
for await (const item of safeStream) {
if (item) {
console.log('Processed item:', item);
} else {
console.log('Skipped item due to error.');
}
}
}
main();
ãã®äŸã§ã¯ãerrorBoundary颿°ãéåæã€ãã¬ãŒã¿ãŒïŒsourceïŒãšãšã©ãŒãã³ãã©ãŒé¢æ°ïŒerrorHandlerïŒãåŒæ°ãšããŠåãåããŸãããœãŒã¹ã€ãã¬ãŒã¿ãŒãå埩åŠçããåå€ãtry...catchãããã¯ã§ã©ããããŸãããšã©ãŒãçºçããå Žåããšã©ãŒãã³ãã©ãŒé¢æ°ãåŒã³åºããå€ãã¹ããããããïŒundefinedãŸãã¯äœãyieldããªãïŒãããã©ã«ãå€ãyieldããããšãã§ããŸããããã«ããããšã©ãŒãã³ããªã³ã°ããžãã¯ãäžå
åããè€æ°ã®ã¹ããªãŒã ã§åå©çšã§ããŸãã
3. ãšã©ãŒãã³ããªã³ã°ä»ãã®éåæã€ãã¬ãŒã¿ãŒãã«ããŒã®äœ¿çš
mapãfilterãreduceãªã©ã®éåæã€ãã¬ãŒã¿ãŒãã«ããŒã䜿çšããå Žåããšã©ãŒããŠã³ããªãŒããã«ããŒé¢æ°èªäœã«çµ±åã§ããŸãã
async function* generateNumbers(limit) {
for (let i = 0; i < limit; i++) {
await new Promise(resolve => setTimeout(resolve, 100));
if (i === 3) {
throw new Error('Simulated error at index 3');
}
yield i;
}
}
async function* mapWithErrorHandling(source, transformFn, errorHandler) {
for await (const value of source) {
try {
yield await transformFn(value);
} catch (error) {
errorHandler(error);
// Yield a default value, or skip this value altogether.
// Here, we'll yield null to indicate an error.
yield null;
}
}
}
async function main() {
const numbers = generateNumbers(5);
const errorHandler = (error) => {
console.error('Error during mapping:', error);
};
const doubledNumbers = mapWithErrorHandling(
numbers,
async (value) => {
return value * 2;
},
errorHandler
);
for await (const number of doubledNumbers) {
if (number !== null) {
console.log('Doubled number:', number);
} else {
console.log('Skipped number due to error.');
}
}
}
main();
ãã®äŸã§ã¯ãã«ã¹ã¿ã ã®mapWithErrorHandling颿°ãäœæããŸããããã®é¢æ°ã¯ãéåæã€ãã¬ãŒã¿ãŒã倿颿°ãããã³ãšã©ãŒãã³ãã©ãŒãåãåããŸãããœãŒã¹ã€ãã¬ãŒã¿ãŒãå埩åŠçããåå€ã«å€æé¢æ°ãé©çšããŸãã倿äžã«ãšã©ãŒãçºçããå Žåããšã©ãŒãã³ãã©ãŒãåŒã³åºããnullãyieldããŸããããã«ããããããã³ã°æäœå
ã§ãšã©ãŒãåŠçããã¹ããªãŒã ãã¯ã©ãã·ã¥ããã®ãé²ãããšãã§ããŸãã
ãšã©ãŒããŠã³ããªãŒãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹
- äžå åããããšã©ãŒãã®ã³ã°: éåæã¹ããªãŒã å ã§çºçãããšã©ãŒãèšé²ããããã«ãäžè²«ãããã®ã³ã°ã¡ã«ããºã ã䜿çšããŸããããã«ãããåé¡ãããç°¡åã«ç¹å®ãã蚺æããã®ã«åœ¹ç«ã¡ãŸããSentryãLogglyãªã©ã®éäžãã®ã³ã°ãµãŒãã¹ã®äœ¿çšãæ€èšããŠãã ããã
- ã°ã¬ãŒã¹ãã«ãã°ã©ããŒã·ã§ã³: ãšã©ãŒãçºçããå Žåãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããã®ãé²ãããã«ããã©ãŒã«ããã¯UIãŸãã¯ããã©ã«ãå€ãæäŸããããšãæ€èšããŠãã ãããããã«ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããšã©ãŒãååšããå Žåã§ãã¢ããªã±ãŒã·ã§ã³ãæ©èœãç¶ããããšãä¿èšŒãããŸããããšãã°ãç»åã®èªã¿èŸŒã¿ã«å€±æããå Žåã¯ããã¬ãŒã¹ãã«ããŒç»åã衚瀺ããŸãã
- ãªãã©ã€ã¡ã«ããºã : äžæçãªãšã©ãŒïŒäŸïŒãããã¯ãŒã¯æ¥ç¶ã®åé¡ïŒã«å¯ŸããŠã¯ããªãã©ã€ã¡ã«ããºã ã®å®è£ ãæ€èšããŠãã ãããããã«ãããé å»¶åŸã«æäœãèªåçã«å詊è¡ãããŠãŒã¶ãŒã®ä»å ¥ãªãã«ãšã©ãŒã解決ã§ããå¯èœæ§ããããŸããç¡éã«ãŒããé¿ããããã«ããªãã©ã€åæ°ãå¶éããããã«æ³šæããŠãã ããã
- ãšã©ãŒç£èŠãšã¢ã©ãŒã: æ¬çªç°å¢ã§ãšã©ãŒãçºçãããšãã«éç¥ãããããã«ããšã©ãŒç£èŠãšã¢ã©ãŒããèšå®ããŸããããã«ãããåé¡ã«ç©æ¥µçã«å¯ŸåŠãã倿°ã®ãŠãŒã¶ãŒã«åœ±é¿ãåã¶ã®ãé²ãããšãã§ããŸãã
- ã³ã³ããã¹ããå«ããšã©ãŒæ å ±: ãšã©ãŒãã³ãã©ãŒã«åé¡ã蚺æããã®ã«ååãªã³ã³ããã¹ããå«ãŸããŠããããšã確èªããŠãã ãããAPIåŒã³åºãã®URLãå ¥åããŒã¿ããã®ä»ã®é¢é£æ å ±ãå«ããŸããããã«ããããããã°ãã¯ããã«ç°¡åã«ãªããŸãã
ãšã©ãŒãã³ããªã³ã°ã«ãããã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåããšã©ãŒãåŠçããéã«æåçããã³èšèªçãªéããèæ ®ããããšãéèŠã§ãã
- ããŒã«ã©ã€ãŒãŒã·ã§ã³: ãšã©ãŒã¡ãã»ãŒãžã¯ããŠãŒã¶ãŒã®åªå èšèªã«ããŒã«ã©ã€ãºããå¿ èŠããããŸããæè¡è ã§ãªããŠãŒã¶ãŒã«ã¯çè§£ãã«ããå°éçšèªã®äœ¿çšã¯é¿ããŠãã ããã
- ã¿ã€ã ãŸãŒã³: ãã°ã®ã¿ã€ã ã¹ã¿ã³ãã¯UTCã§èšé²ãããããŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ãå«ããŠãã ãããããã¯ãäžçã®ããŸããŸãªå°åã§çºçããåé¡ããããã°ããéã«éåžžã«éèŠã§ãã
- ããŒã¿ãã©ã€ãã·ãŒ: ãšã©ãŒããã°ã«èšé²ããéã¯ãããŒã¿ãã©ã€ãã·ãŒèŠå¶ïŒäŸïŒGDPRãCCPAïŒã«æ³šæããŠãã ãããå人ãç¹å®ã§ããæ å ±ïŒPIIïŒãªã©ã®æ©å¯æ å ±ããã°ã«èšé²ããããšã¯é¿ããŠãã ããããã°ã«èšé²ããåã«ããŒã¿ãå¿ååãŸãã¯ä»®ååããããšãæ€èšããŠãã ããã
- ã¢ã¯ã»ã·ããªãã£: ãšã©ãŒã¡ãã»ãŒãžãé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ãããæç¢ºã§ç°¡æœãªèšèã䜿çšãããšã©ãŒã¢ã€ã³ã³ã«ã¯ä»£æ¿ããã¹ããæäŸããŠãã ããã
- æåçãªé æ ®: ãšã©ãŒã¡ãã»ãŒãžãèšèšããéã«ã¯ãæåçãªéãã«æ³šæããŠãã ãããç¹å®ã®æåã§äžå¿«ãŸãã¯äžé©åãšèŠãªãããå¯èœæ§ã®ããç»åãèšèã®äœ¿çšã¯é¿ããŠãã ãããããšãã°ãç¹å®ã®è²ãèšå·ã¯æåã«ãã£ãŠç°ãªãæå³ãæã€å ŽåããããŸãã
å®äžçã§ã®äŸ
- Eã³ããŒã¹ãã©ãããã©ãŒã : Eã³ããŒã¹ãã©ãããã©ãŒã ã¯ãè€æ°ã®ãã³ããŒãã補åããŒã¿ãååŸããŸãã1ã€ã®ãã³ããŒã®APIãããŠã³ããŠããå Žåããã©ãããã©ãŒã ã¯ããã®è£œåãäžæçã«å©çšã§ããªãããšã瀺ãã¡ãã»ãŒãžã衚瀺ããããšã§ãšã©ãŒãé©åã«åŠçããä»ã®ãã³ããŒã®è£œåã¯åŒãç¶ã衚瀺ããŸãã
- éèã¢ããªã±ãŒã·ã§ã³: éèã¢ããªã±ãŒã·ã§ã³ã¯ãããŸããŸãªãœãŒã¹ããæ ªäŸ¡ãååŸããŸãã1ã€ã®ãœãŒã¹ãä¿¡é Œã§ããªãå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ä»ã®ãœãŒã¹ã®ããŒã¿ã䜿çšããããŒã¿ãå®å šã§ãªãå¯èœæ§ãããããšã瀺ãå 責äºé ã衚瀺ã§ããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã : ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã¯ãããŸããŸãªãœãŒã·ã£ã«ãããã¯ãŒã¯ããã³ã³ãã³ããéçŽããŸãã1ã€ã®ãããã¯ãŒã¯ã®APIã«åé¡ãçºçããŠããå Žåããã©ãããã©ãŒã ã¯ãã®ãããã¯ãŒã¯ãšã®çµ±åãäžæçã«ç¡å¹ã«ãããŠãŒã¶ãŒãä»ã®ãããã¯ãŒã¯ã®ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
- ãã¥ãŒã¹ã¢ã°ãªã²ãŒã¿ãŒ: ãã¥ãŒã¹ã¢ã°ãªã²ãŒã¿ãŒã¯ãäžçäžã®ããŸããŸãªãã¥ãŒã¹ãœãŒã¹ããèšäºãååŸããŸãã1ã€ã®ãã¥ãŒã¹ãœãŒã¹ãäžæçã«å©çšã§ããªãããç¡å¹ãªãã£ãŒããæã£ãŠããå Žåãã¢ã°ãªã²ãŒã¿ãŒã¯ãã®ãœãŒã¹ãã¹ãããããä»ã®ãœãŒã¹ããã®èšäºãåŒãç¶ã衚瀺ããŠãå®å šãªåæ¢ãé²ããŸãã
çµè«
JavaScriptéåæã€ãã¬ãŒã¿ãŒãã«ããŒã®ããã®ãšã©ãŒããŠã³ããªãŒã®å®è£
ã¯ãå埩åãããå
ç¢ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããéåææäœãtry...catchãããã¯ã§ã©ããããããåå©çšå¯èœãªãšã©ãŒããŠã³ããªãŒãã«ããŒé¢æ°ãäœæãããããããšã§ãéåæã¹ããªãŒã å
ã®ãšã©ãŒãåé¢ããŠåŠçããã¢ããªã±ãŒã·ã§ã³å
šäœã®ã¯ã©ãã·ã¥ãé²ãããšãã§ããŸãããããã®ãã¹ããã©ã¯ãã£ã¹ãåãå
¥ããããšã§ãäºæãã¬åé¡ã«é©åã«å¯ŸåŠããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
ããã«ãããŒã«ã©ã€ãŒãŒã·ã§ã³ãã¿ã€ã ãŸãŒã³ãããŒã¿ãã©ã€ãã·ãŒãã¢ã¯ã»ã·ããªãã£ãæåçãªé æ ®ãšãã£ãã°ããŒãã«ãªèŠçŽ ãèæ ®ããããšã¯ã倿§ãªåœéçãªãªãŒãã£ãšã³ã¹ã«å¯Ÿå¿ããã¢ããªã±ãŒã·ã§ã³ãéçºããäžã§æ¥µããŠéèŠã§ãããšã©ãŒãã³ããªã³ã°ã«ã°ããŒãã«ãªèŠç¹ãåãå ¥ããããšã§ãã¢ããªã±ãŒã·ã§ã³ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹ããããã䜿ãããããã®ã§ããããšãä¿èšŒã§ããŸãã